package com.triones.api.service;

import com.ruoyi.common.core.domain.PageQuery;
import com.ruoyi.common.core.domain.entity.SysUser;
import com.ruoyi.common.core.page.TableDataInfo;
import com.triones.api.entity.NoticeMainContentDO;
import com.triones.api.entity.NoticeSceneDO;
import com.triones.api.entity.bo.NoticeBO;
import com.triones.api.entity.interlace.dto.InterlaceNoticeDO;
import com.triones.api.entity.interlace.dto.InterlaceNoticeSceneDO;
import com.triones.api.entity.interlace.vo.InterlaceNoticeSceneVO;
import com.triones.api.entity.param.CustomNoticeMemberParams;
import com.triones.api.entity.param.NoticeParams;
import com.triones.api.entity.vo.*;

import java.util.List;

/**
 * 通知 -接口
 */
public interface NoticeService {

    /**
     * 通知列表（分页）
     * @param dto
     * @param pageQuery
     * @return
     */
    TableDataInfo<CustomNoticeVO> pageList(InterlaceNoticeDO dto, PageQuery pageQuery);

    /**
     * 移除通知
     * @param id
     * @return
     */
    boolean remove(Long id);

    /**
     * 通知场景列表（分页）
     * @param keyword
     * @param pageQuery
     * @return
     */
    TableDataInfo<InterlaceNoticeSceneVO> noticeSceneList(String keyword, PageQuery pageQuery);

    /**
     * 校验通知场景名称是否唯一
     * @param noticeSceneDO
     * @return 结果
     */
    boolean checkNoticeSceneName(InterlaceNoticeSceneDO noticeSceneDO);

    /**
     * 新增通知场景
     * @param noticeSceneDO
     * @return
     */
    boolean addNoticeScene(InterlaceNoticeSceneDO noticeSceneDO);

    /**
     * 修改通知场景
     * @param noticeSceneDO
     * @return
     */
    boolean editNoticeScene(InterlaceNoticeSceneDO noticeSceneDO);

    /**
     * 移除通知场景
     * @param id
     * @return
     */
    boolean removeNoticeScene(Long id);

    /**
     * 通知场景详情
     * @param id
     * @return
     */
    InterlaceNoticeSceneVO noticeSceneDetail(Long id);

    /**
     * 通知场景列表
     */
    List<InterlaceNoticeSceneVO> noticeSceneList();

    /**
     * 新增通知
     * @param bo
     * @return
     */
    void addNotice(NoticeBO bo);

    /**
     * 通知用户列表（分页）
     * @param customNoticeMemberParams
     * @param pageQuery
     * @return
     */
    TableDataInfo<CustomNoticeMemberVO> noticeMemberPageList(CustomNoticeMemberParams customNoticeMemberParams, PageQuery pageQuery);

    /**
     * 通知列表（分页）
     * @param pageQuery
     * @return
     */
    TableDataInfo<ApiCustomNoticeVO> apiPageList(PageQuery pageQuery);

    /**
     * 通知详情
     * @param id
     * @return
     */
    ApiCustomNoticeVO apiGetNoticeInfoById(Long id);

    /**
     * 通知已读
     * @param ids
     * @return
     */
    boolean noticeRead(Long[] ids);

    /**
     * 新增通知
     * @param sceneId
     * @param mainContent
     * @param subContent
     * @param uid
     */
    void addNotice(Long sceneId,String mainContent,String subContent,Long uid);

    /**
     * 通知列表
     * @return
     */
    List<ApiCustomNoticeVO> apiList();
}
